OT: Sql command pro vyber pomoci AND.

Otázka od: David Michal

4. 9. 2002 17:42

Zdravim,
Potreboval bych asi takovyto SQL select:

Select * From Table1 Where (Cena = 100) and (Cena = 200)

Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak definovat
podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva zaznamy jeden by
mel cena=100 a druhy cena=200 vratil by mi select oba dva. Pokud vsak
napriklad druhy zaznam bude mit cena=300, pak mi select nevrati ani jeden
zaznam. Ale jak to zapsat?

Urcite jste jiz nekdo neco podobneho resil, poradite prosim?
Diky,
David
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.384 / Virus Database: 216 - Release Date: 21/08/2002

Odpovedá: Ing. Pavel Žilinec

5. 9. 2002 6:52

A co treba dotaz predtim?

Select @Pocet = count(*) From Table1 Where (Cena = 100) and (Cena = 200)
if @Pocet = 2
  Select * From Table1 Where (Cena = 100) and (Cena = 200)
Nebo to dat do pomocne tabulky a pak to otestovat (aby se nemusel
provadet vyber nad pripadne velkou tabulkou dvakrat)
--------
ing. Pavel Zilinec
MailTo:zilinec@email.cz

Prog-Soft s.r.o. Plzen
Informacni system pro vyrobce
a distributory napoju

DM> Potreboval bych asi takovyto SQL select:

DM> Select * From Table1 Where (Cena = 100) and (Cena = 200)

DM> Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak definovat
DM> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva zaznamy jeden by
DM> mel cena=100 a druhy cena=200 vratil by mi select oba dva. Pokud vsak
DM> napriklad druhy zaznam bude mit cena=300, pak mi select nevrati ani jeden
DM> zaznam. Ale jak to zapsat?

Odpovedá: Tom Beran

5. 9. 2002 18:44

>DM> Select * From Table1 Where (Cena = 100) and (Cena = 200)
>
>DM> Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak definovat
>DM> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva zaznamy jeden by
>DM> mel cena=100 a druhy cena=200 vratil by mi select oba dva. Pokud vsak
>DM> napriklad druhy zaznam bude mit cena=300, pak mi select nevrati ani jeden

Select * From Table1
WHERE ((Cena = 100) AND EXISTS (SELECT * FROM Table1 WHERE Cena = 200))
   OR ((Cena = 200) AND EXISTS (SELECT * FROM Table1 WHERE Cena = 100))


T.

Odpovedá: Lstiburek Pavel

5. 9. 2002 12:12

Teorie logiky mi nejak vtirave stale naznacuje ze tyt SQL dotazy VZDY
nevrati NIC.
V jednom okamziku byva ve sloupci pouze jedna hodnota !

Neni mi jasne co to ma byt vysledkem ?

Pokud vsechny zaznamy kde Cena = 100 nebo Cena = 200
----------------------------------------------------------------------------
----------

 Select * From Table1 Where (Cena = 100) OR (Cena = 200)

Pokud to ma vratit bud DVA nebo NIC tak
---------------------------------------------------------
 Select @Pocet = count(*) From Table1 Where (Cena = 100) OR (Cena = 200)
 if @Pocet = 2
   Select * From Table1 Where (Cena = 100) OR (Cena = 200)
 else
   SELECT * From Table1 Where PK = NULL

Pavel



> Od: zilinec@email.cz [mailto:zilinec@email.cz]
>
> A co treba dotaz predtim?
>
> Select @Pocet = count(*) From Table1 Where (Cena = 100) and
> (Cena = 200)
> if @Pocet = 2
> Select * From Table1 Where (Cena = 100) and (Cena = 200)
> Nebo to dat do pomocne tabulky a pak to otestovat (aby se nemusel
> provadet vyber nad pripadne velkou tabulkou dvakrat)
> --------
> ing. Pavel Zilinec
> MailTo:zilinec@email.cz
>
> Prog-Soft s.r.o. Plzen
> Informacni system pro vyrobce
> a distributory napoju
>
> DM> Potreboval bych asi takovyto SQL select:
>
> DM> Select * From Table1 Where (Cena = 100) and (Cena = 200)
>
> DM> Takto to samozrejme nevrati nic. Ale nemohu prijit na to
> jak definovat
> DM> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva
> zaznamy jeden by
> DM> mel cena=100 a druhy cena=200 vratil by mi select oba
> dva. Pokud vsak
> DM> napriklad druhy zaznam bude mit cena=300, pak mi select
> nevrati ani jeden
> DM> zaznam. Ale jak to zapsat?
>

Odpovedá: Lstiburek Pavel

6. 9. 2002 1:53

Teorie logiky mi nejak vtirave stale naznacuje ze tyt SQL dotazy VZDY
nevrati NIC.
V jednom okamziku byva ve sloupci pouze jedna hodnota !

Neni mi jasne co to ma byt vysledkem ?

Pokud vsechny zaznamy kde Cena = 100 nebo Cena = 200
----------------------------------------------------------------------------
----------

 Select * From Table1 Where (Cena = 100) OR (Cena = 200)

Pokud to ma vratit bud DVA nebo NIC tak
---------------------------------------------------------
 Select @Pocet = count(*) From Table1 Where (Cena = 100) OR (Cena = 200)
 if @Pocet = 2
   Select * From Table1 Where (Cena = 100) OR (Cena = 200)
 else
   SELECT * From Table1 Where PK = NULL

Pavel



> Od: zilinec@email.cz [mailto:zilinec@email.cz]
>
> A co treba dotaz predtim?
>
> Select @Pocet = count(*) From Table1 Where (Cena = 100) and
> (Cena = 200)
> if @Pocet = 2
> Select * From Table1 Where (Cena = 100) and (Cena = 200)
> Nebo to dat do pomocne tabulky a pak to otestovat (aby se nemusel
> provadet vyber nad pripadne velkou tabulkou dvakrat)
> --------
> ing. Pavel Zilinec
> MailTo:zilinec@email.cz
>
> Prog-Soft s.r.o. Plzen
> Informacni system pro vyrobce
> a distributory napoju
>
> DM> Potreboval bych asi takovyto SQL select:
>
> DM> Select * From Table1 Where (Cena = 100) and (Cena = 200)
>
> DM> Takto to samozrejme nevrati nic. Ale nemohu prijit na to
> jak definovat
> DM> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva
> zaznamy jeden by
> DM> mel cena=100 a druhy cena=200 vratil by mi select oba
> dva. Pokud vsak
> DM> napriklad druhy zaznam bude mit cena=300, pak mi select
> nevrati ani jeden
> DM> zaznam. Ale jak to zapsat?
>

Odpovedá: Ben, Martin (CAP, GCF)

4. 9. 2002 17:00

Co to zkusit takto:

Select * From Table1 Where (Cena = 100) OR (Cena = 200)


Martin Ben

> -----Original Message-----
> From: David Michal [mailto:david.michal@www-bv.com]
>
> Select * From Table1 Where (Cena = 100) and (Cena = 200)
>
> Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak definovat
> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva
> zaznamy jeden by
> mel cena=100 a druhy cena=200 vratil by mi select oba dva. Pokud vsak
> napriklad druhy zaznam bude mit cena=300, pak mi select
> nevrati ani jeden
> zaznam. Ale jak to zapsat?

Odpovedá: David Michal

4. 9. 2002 18:08

Pomoci tohoto selectu dostanu vysledek 1 radku i v pripade ze napr. nenajde
zadny row s cena=200. Ale ja potrebuji aby mi vratil vysledek pouze v
pripade, za najde rows jak s cena=100 tak s cena=200.
David


Co to zkusit takto:

Select * From Table1 Where (Cena = 100) OR (Cena = 200)


Martin Ben


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.384 / Virus Database: 216 - Release Date: 21/08/2002

Odpovedá: Martin Cajbik

4. 9. 2002 20:56

Sice nechapem naco by to mohlo sluzit ale dalo by sa to napisat takto

Select * From Table1 Where ((Cena = 100) OR (Cena = 200))
  AND EXISTS(SELECT * FROM Table1 Where Cena = 100)
  AND EXISTS(SELECT * FROM Table1 Where Cena = 200)

MarCaNT (marcant@sct.sk)


> Pomoci tohoto selectu dostanu vysledek 1 radku i v pripade ze napr.
nenajde
> zadny row s cena=200. Ale ja potrebuji aby mi vratil vysledek pouze v
> pripade, za najde rows jak s cena=100 tak s cena=200.
> David
>
>
> Co to zkusit takto:
>
> Select * From Table1 Where (Cena = 100) OR (Cena = 200)
>
>
> Martin Ben
>

Odpovedá: Létal Integrodat

5. 9. 2002 0:24

Nevim, zda to lze vyresit SQL selectem,
ale urcite musis zaridit, aby se v pripade
    NOT (Cena in [100,200])
vynuloval pripadny vysledek selectu.
mil

----- Original Message -----
From: "David Michal" <david.michal@www-bv.com>
To: <delphi-l@clexpert.cz>
Sent: Wednesday, September 04, 2002 4:40 PM
Subject: OT: Sql command pro vyber pomoci AND.


> Zdravim,
> Potreboval bych asi takovyto SQL select:
>
> Select * From Table1 Where (Cena = 100) and (Cena = 200)
>
> Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak definovat
> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva zaznamy jeden by
> mel cena=100 a druhy cena=200 vratil by mi select oba dva. Pokud vsak
> napriklad druhy zaznam bude mit cena=300, pak mi select nevrati ani jeden
> zaznam. Ale jak to zapsat?
>
> Urcite jste jiz nekdo neco podobneho resil, poradite prosim?
> Diky,
> David
> ---
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.384 / Virus Database: 216 - Release Date: 21/08/2002
>
>


---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.384 / Virová báze: 216 - datum vydání: 21.8.2002

Odpovedá: Ales Vasicek

5. 9. 2002 10:50

Select * From Table1 Where (Cena = 100) OR (Cena = 200)
                                        ^^

A.

> -----Original Message-----
> From: David Michal [mailto:david.michal@www-bv.com]
>
> Select * From Table1 Where (Cena = 100) and (Cena = 200)
>
> Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak definovat
> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva
> zaznamy jeden by
> mel cena=100 a druhy cena=200 vratil by mi select oba dva. Pokud vsak
> napriklad druhy zaznam bude mit cena=300, pak mi select
> nevrati ani jeden

Odpovedá: Slavek Rydval

5. 9. 2002 13:05


Mno, jestli jsem to pochopil dobre, tak by slo neco takovehoto:

select distinct *
from table1
where exists (select * from table1 where cena = 100)
  and exists (select * from table1 where cena = 200)
  and not exists (select *
                  from table1
                  where cena <> 100
                    and cena <> 200)

Ovsem index nad sloupcem cena velmi doporuceny.

Slavek
> Co to zkusit takto:
>
> Select * From Table1 Where (Cena = 100) OR (Cena = 200)
>
>
> Martin Ben
>
> > -----Original Message-----
> > From: David Michal [mailto:david.michal@www-bv.com]
> >
> > Select * From Table1 Where (Cena = 100) and (Cena = 200)
> >
> > Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak
> > definovat podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva
> > zaznamy jeden by mel cena=100 a druhy cena=200 vratil by mi select
> > oba dva. Pokud vsak napriklad druhy zaznam bude mit cena=300, pak mi
> > select nevrati ani jeden zaznam. Ale jak to zapsat?
>
>

--------------------------------------------------------
http://atrey.karlin.mff.cuni.cz/~rk
Pozor, nyni pouze http://195.113.18.111/~rk/index.shtml
--------------------------------------------------------
Udelejte to blbuvzdorne a zitra nekdo vymysli jeste vetsiho blba.

Odpovedá: Slavek Rydval

5. 9. 2002 8:52


Ahoj,

to pak dostanes jednak vzhledem k existum jsou zbytecne podminky
(Cena = 100) OR (Cena = 200) a take dostanes vysledek i v pripade, ze
je v tabuli napr:

100
100
200
300

coz autor nechce. Pokud chapu puvodni pozadavek, tak chce vysledek
pouze v pripade, ze v tabuli jsou pouze hodnoty 100 A 200. (spravny
select viz jiny mail).

Slavek
On 4 Sep 2002 at 21:14, Martin Cajbik wrote:
> Sice nechapem naco by to mohlo sluzit ale dalo by sa to napisat takto
>
> Select * From Table1 Where ((Cena = 100) OR (Cena = 200))
> AND EXISTS(SELECT * FROM Table1 Where Cena = 100)
> AND EXISTS(SELECT * FROM Table1 Where Cena = 200)
>
> MarCaNT (marcant@sct.sk)
>
>
> > Pomoci tohoto selectu dostanu vysledek 1 radku i v pripade ze napr.
> nenajde
> > zadny row s cena=200. Ale ja potrebuji aby mi vratil vysledek pouze
> > v pripade, za najde rows jak s cena=100 tak s cena=200. David
> >
> >
> > Co to zkusit takto:
> >
> > Select * From Table1 Where (Cena = 100) OR (Cena = 200)
> >
> >
> > Martin Ben
> >
>
>
>

--------------------------------------------------------
http://atrey.karlin.mff.cuni.cz/~rk
Pozor, nyni pouze http://195.113.18.111/~rk/index.shtml
--------------------------------------------------------
Udelejte to blbuvzdorne a zitra nekdo vymysli jeste vetsiho blba.

Odpovedá: Ben, Martin (CAP, GCF)

6. 9. 2002 0:38

Premyslel jsem o tom taky, ale nechapu k cemu to muze byt dobre

Martin Ben


> -----Original Message-----
> From: Slavek Rydval [mailto:rk@atrey.karlin.mff.cuni.cz]
>
> Mno, jestli jsem to pochopil dobre, tak by slo neco takovehoto:
>
> select distinct *
> from table1
> where exists (select * from table1 where cena = 100)
> and exists (select * from table1 where cena = 200)
> and not exists (select *
> from table1
> where cena <> 100
> and cena <> 200)
>
> Ovsem index nad sloupcem cena velmi doporuceny.

Odpovedá: David Michal

5. 9. 2002 22:25

No k necemu dobre to je.  
Zde jsem napsal priklad s cenou jelikoz mi to prislo jednodusi nezli
popisovat skutecnou situaci kterou jsem resil. Ve skutecnosti chci takto
porovnavat datumy. A to u tabulky kde je hodne dulezite zda pokud je vyplnen
napriklad zaznam datum1 = 1.9.2002, tak musi byt v jinem row vyplnen zaznam
datum2 = 1.10.2002. Takze proto jsem resil jak vyresit operator and mezi
rows a nemohl jsem pouzit operator or.
Diky,
David

Premyslel jsem o tom taky, ale nechapu k cemu to muze byt dobre

Martin Ben


> -----Original Message-----
> From: Slavek Rydval [mailto:rk@atrey.karlin.mff.cuni.cz]
>
> Mno, jestli jsem to pochopil dobre, tak by slo neco takovehoto:
>
> select distinct *
> from table1
> where exists (select * from table1 where cena = 100)
> and exists (select * from table1 where cena = 200)
> and not exists (select *
> from table1
> where cena <> 100
> and cena <> 200)
>

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.385 / Virus Database: 217 - Release Date: 04/09/2002

Odpovedá: Käss, Pavel

5. 9. 2002 14:18

ty prvni dva selecty jsou zbytecny: staci
select * from table1
where ((cena = 100) or (cena = 200))
   and not exists (select * from table1 where cena <> 100 and cena <> 200);

> -----Original Message-----
> select distinct *
> from table1
> where exists (select * from table1 where cena = 100)
> and exists (select * from table1 where cena = 200)
> and not exists (select *
> from table1
> where cena <> 100
> and cena <> 200)
>
> Ovsem index nad sloupcem cena velmi doporuceny.
> > > Select * From Table1 Where (Cena = 100) and (Cena = 200)
> > >
> > > Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak
> > > definovat podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva
> > > zaznamy jeden by mel cena=100 a druhy cena=200 vratil by mi select
> > > oba dva. Pokud vsak napriklad druhy zaznam bude mit cena=300, pak mi
> > > select nevrati ani jeden zaznam. Ale jak to zapsat?
>

Odpovedá: Slavek Rydval

8. 9. 2002 2:32


Ahoj,

> On 5 Sep 2002 at 15:13, Käss, Pavel wrote:
> ty prvni dva selecty jsou zbytecny: staci
*****to samozrejme neni pravda, protoze tazatel chtel, aby se vybraly
rakdy pouze v pripade, ze se tam vyskytuje cena = 100 A SOUCASNE
(nikoliv nebo) cena = 200...

Slavek

> select * from table1
> where ((cena = 100) or (cena = 200))
> and not exists (select * from table1 where cena <> 100 and cena <>
> 200);
> > select distinct *
> > from table1
> > where exists (select * from table1 where cena = 100)
> > and exists (select * from table1 where cena = 200)
> > and not exists (select *
> > from table1
> > where cena <> 100
> > and cena <> 200)
> >
> > Ovsem index nad sloupcem cena velmi doporuceny.

--------------------------------------------------------
http://atrey.karlin.mff.cuni.cz/~rk
Pozor, nyni pouze http://195.113.18.111/~rk/index.shtml
--------------------------------------------------------
Udelejte to blbuvzdorne a zitra nekdo vymysli jeste vetsiho blba.

Odpovedá: Jan Krízek

8. 9. 2002 1:05

Takze jestli to chapu, tak chces z jedne tabulky dvojici kde jeden datum
je 1.9.2002 a druhy 1.10.2002.

Pak bych volil spojeni teto tabulky sama se sebou:

SELECT * FROM TABLE T1, TABLE T2 WHERE T1.datum = '1.9.2002' AND
T2.datum = '1.10.2002';

Takhle ti to vrati v kazdem radku dvojici, kde prvni ma prvni datum a v
druhe to druhe datum. Ale pozor vrati to vsechny takove dvojice! Pak
zalezi jestli je v te tve tabulce datum jedinecne, nebo mas dalsi
polozku podle ktere poznas, ktere datumy patri k sobe. Pak bys tam
pridal jeste spojeni podle teto polozky.

Urcite by pak slo napsat i dotaz ve smyslu:

SELECT * FROM TABLE T1, TABLE T2 WHERE PlusMesic(T1.datum) = T2.datum;

ktery by ti vratil vsechny dvojice, ktere splnuji tvoji podminku pro
sparovani. To PlusMesic ber s rezervou - mam tim na mysli nejakou funkci
ktera ti k datumu pricte ten mesic (ci co potrebujes), to vsak zalezi na
tve databazi.

Honza +

> -----Original Message-----
> From: David Michal [mailto:david.michal@www-bv.com]
> Sent: Thursday, September 05, 2002 2:21 PM
> To: delphi-l@clexpert.cz
> Subject: RE: Sql command pro vyber pomoci AND.
>
>
> No k necemu dobre to je.  
> Zde jsem napsal priklad s cenou jelikoz mi to prislo jednodusi nezli
> popisovat skutecnou situaci kterou jsem resil. Ve skutecnosti
> chci takto
> porovnavat datumy. A to u tabulky kde je hodne dulezite zda
> pokud je vyplnen
> napriklad zaznam datum1 = 1.9.2002, tak musi byt v jinem row
> vyplnen zaznam
> datum2 = 1.10.2002. Takze proto jsem resil jak vyresit
> operator and mezi
> rows a nemohl jsem pouzit operator or.
> Diky,
> David